AWS CDKを用いたAWS Step Functionsステートマシン作成のチュートリアルをやってみた
こんにちは。サービスグループの武田です。
今回はAWS公式ドキュメントで提供されている、AWS Step FunctionsのステートマシンをAWS CDKで作成するチュートリアルをやってみました。
次のポリシーで進めます。おおむね筆者の好みです。
- aws-cdkはローカルにインストール
- 言語はTypeScriptを選択
- Lambdaのランタイムは最新を使用
環境
次のような環境で実施しました。
$ node -v v14.18.1 $ npm -v 8.1.1 $ sw_vers ProductName: macOS ProductVersion: 11.4 BuildVersion: 20F71
やってみた
まずはプロジェクトを作成し、必要なモジュールなどをインストールします。
$ mkdir step && cd $_ $ npx cdk init --language typescript $ npm install @aws-cdk/aws-lambda @aws-cdk/aws-stepfunctions @aws-cdk/aws-stepfunctions-tasks
プロジェクトのひな型ができたので、スタックファイルにLambda関数およびStep Functionsのステートマシンを定義します。TypeScriptのコードでステートマシンを定義しているのが新鮮でしょうか。
import * as cdk from "@aws-cdk/core"; import * as lambda from "@aws-cdk/aws-lambda"; import * as sfn from "@aws-cdk/aws-stepfunctions"; import * as tasks from "@aws-cdk/aws-stepfunctions-tasks"; export class StepStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); const helloFunction = new lambda.Function(this, "MyLambdaFunction", { code: lambda.Code.fromInline(` exports.handler = (event, context, callback) => { callback(null, "Hello World!"); }; `), runtime: lambda.Runtime.NODEJS_14_X, handler: "index.handler", timeout: cdk.Duration.seconds(25), }); const stateMachine = new sfn.StateMachine(this, "MyStateMachine", { definition: new tasks.LambdaInvoke(this, "MyLambdaTask", { lambdaFunction: helloFunction, }).next(new sfn.Succeed(this, "GreetedWorld")), }); } }
準備できたらこれらをデプロイします。ただそのままですとus-east-1
にデプロイしてしまうため、ap-northeast-1
にデプロイされるように少し修正します。
#!/usr/bin/env node import "source-map-support/register"; import * as cdk from "@aws-cdk/core"; import { StepStack } from "../lib/step-stack"; const app = new cdk.App(); new StepStack(app, "StepStack", { env: { account: process.env.CDK_DEFAULT_ACCOUNT, region: "ap-northeast-1" }, });
修正できたらデプロイしましょう。必要なIAMロールなども自動で作成されとても便利。
$ npx cdk deploy
マネジメントコンソールでStep Functionsのページに行ってみると、次のようなステートマシンが作成されています。
ステートマシンを実行してしばらく待つと成功しました。Lambda関数の実行結果も次の状態に渡されています。
最後に環境を削除しましょう。次のコマンドですべてのリソースが削除されます。
$ npx cdk destroy
まとめ
Step Functionsのステートマシン構築は今回のようにCDKで行うほかに、Workflow Studioを使ってGUIでも可能です。CDKを採用するメリットは環境構築から一貫してコードで管理できることです。しかしコードでステートマシンを定義するのは賛否ある部分かと思われます。IaCとの兼ね合いもありますので、自分たちのプロジェクトに合った方法を採用したいですね。